<?php


namespace app\index\controller;


use think\Loader;

class Codereplace extends Base
{
    public function index()
    {
        return view();
    }

    /*
     * 接受上传的文件
     */
    public function upload()
    {
        if (request()->ispost()) {
            $post = input('post.');
            $file = request()->file('excel');
            if (empty($file)) {
                $this->error('上传失败**不能为空', 'Codereplace/index');
            }
            //dump($file);die;
            $this->excel_import($file);

        }
    }


    //处理上传的文件模块 excel
    public function excel_import($file)
    {
        // dump($file);die;
        // 移动到框架应用根目录/public/uploads/ 目录下
        $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads' . DS . 'excel');
        if ($info) {
            //获取文件所在目录名
            $path = ROOT_PATH . 'public' . DS . 'uploads' . DS . 'excel/' . $info->getSaveName();
            //加载PHPExcel类
            // vendor("PHPExcel.PHPExcel");
            Loader::import('PHPExcel.PHPExcel');
            Loader::import('PHPExcel.PHPExcel.IOFactory.PHPExcel_IOFactory');
            //实例化PHPExcel类（注意：实例化的时候前面需要加'\'）
            // $objReader=new \PHPExcel_Reader_Excel5();
            $filename = $info->getSaveName();
            //获取文件名后缀
            $suf = substr($filename, strrpos($filename, '.'));
            if ($suf == '.xlsx') {
                $objReader = new \PHPExcel_Reader_Excel2007();
            } else if ($suf == '.xls') {
                $objReader = new \PHPExcel_Reader_Excel5();
            } else {
                $this->error('文件类型错误**请选择 .xlsx***.xls', 'Codereplace/index');
            }

            $objPHPExcel = $objReader->load($path, $encode = 'utf-8'); //获取excel文件

            //----
            $cur = $objPHPExcel->getSheet();  // 读取第一个表

            $sheet = $objPHPExcel->getSheet(0); //激活当前的表
            $highestRow = $sheet->getHighestRow(); // 取得总行数
            $highestColumn = $sheet->getHighestColumn(); // 取得总列数 C

            //不大于5列
            if ($highestColumn < 2 && $highestColumn > 1) {
                $this->error('当前仅仅支持最大 2 列 ， 请修改', 'Codereplace/index');
            }


            //获取上传的文件 列名
            $columnname['A'] = $objPHPExcel->getActiveSheet()->getCell("A" . 1)->getValue();
            $columnname['B'] = $objPHPExcel->getActiveSheet()->getCell("B" . 1)->getValue();


            //去除数据中的null值 去掉 NULL  FALSE  负值
            $aa = controller("import");

            $columnname = $aa->CheckColumNameError(array_filter($columnname));


            //判断如果$columnname 第一列不是ybid  就返回
            if ($columnname['A'] !== 'precode') {
                $this->error('第一列必须为**precode**请修改', 'Codereplace/index');
            }

            $a = 0;
            //将表格里面的数据循环到数组中
            for ($i = 2; $i <= $highestRow; $i++) {
                //*为什么$i=2? (因为Excel表格第一行应该是姓名，年龄，班级，从第二行开始，才是我们要的数据。)
                $data[$a]['A'] = $objPHPExcel->getActiveSheet()->getCell("A" . $i)->getValue(); //
                $data[$a]['B'] = $objPHPExcel->getActiveSheet()->getCell("B" . $i)->getValue(); //
                //这里开始执行更新  调用存储过程



                if (Model('common')->ReplaceCode(trim($data[$a]['A']), trim($data[$a]['B']))) {
                    // 这里的数据根据自己表格里面有多少个字段自行决定

                    //重新生成报告
                    Model('common')->ModifyReportStatus(trim($data[$a]['A']));
                    $a++;
                } else {
                    $this->error("**执行失败**第.$i.行", 'import/index');
                }
                //为 false 执行失败
            }

            //更新完了   --记录日志
            //log记录修改信息
            $filelogaddress = DS . 'excel/' . $info->getSaveName();
            Model('Log')->addLog("Excel导入修改了一共**.$highestRow.**条*" . $columnname['B'] . ".*记录**路径{$filelogaddress}", 1, substr($columnname['A'], 5));

            //
            $this->success("更新修改成功{$highestRow}条记录", 'import/index');

        } else {
            // 上传失败获取错误信息
            $this->error("处理上传数据失败.$file->getError().", 'import/index');
        }
    }
}